package lei.h_java8特性.方法引用;
/**
 * @className: MethodReferenceExample
 * @author: xl
 * @date: 2025/3/1 16:06
 * @Version: 1.0
 * @description:
 */

import java.util.function.Consumer;
import java.util.function.Function;

public class MethodReferenceExample01 {
    public static void main(String[] args) {
        // 创建一个对象
        Printer printer = new Printer();

        // 使用 Lambda 表达式
        //
        Consumer<String> lambda = str -> printer.print(str);

        // 使用实例方法引用
        //抽象方法"参数"和"返回值类型"，和某个 实例方法 的"参数"与"返回值类型"一致
        Consumer<String> methodRef = printer::print;

        lambda.accept("Hello, Lambda!"); // 输出: Printing: Hello, Lambda!
        methodRef.accept("Hello, Method Reference!"); // 输出: Printing: Hello, Method Reference!


        // 使用 Lambda 表达式
        Function<String, String> lambda1 = str -> str.toUpperCase();

        // 使用类的任意对象的实例方法引用
        Function<String, String> methodRef1 = String::toUpperCase;

        System.out.println(lambda1.apply("hello")); // 输出: HELLO
        System.out.println(methodRef1.apply("world")); // 输出: WORLD
    }
}

class Printer {
    public void print(String message) {
        System.out.println("Printing: " + message);
    }
}
